using System;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("SpecialEventManager")]
	public class SpecialEventManager : MonoClass
	{
		[Attribute38("SpecialEventManager.EventTiming")]
		public class EventTiming : MonoClass
		{
			public EventTiming(IntPtr address, string className)
				: base(address, className)
			{
			}

			public EventTiming(IntPtr address)
				: this(address, "EventTiming")
			{
			}

			public bool HasStarted(DateTime localTimestamp)
			{
				return method_11<bool>("HasStarted", new object[1] { localTimestamp });
			}

			public bool HasEnded(DateTime localTimestamp)
			{
				return method_11<bool>("HasEnded", new object[1] { localTimestamp });
			}

			public bool IsActiveNow(DateTime localTimestamp)
			{
				return method_11<bool>("IsActiveNow", new object[1] { localTimestamp });
			}

			public bool IsStartTimeInTheFuture(DateTime localTimestamp)
			{
				return method_11<bool>("IsStartTimeInTheFuture", new object[1] { localTimestamp });
			}
		}

		public static SpecialEventType CURRENT_SET_ROTATION_EVENT => MonoClass.smethod_6<SpecialEventType>(TritonHs.MainAssemblyPath, "", "SpecialEventManager", "CURRENT_SET_ROTATION_EVENT");

		public static SpecialEventType PRE_CURRENT_SET_ROTATION_EVENT => MonoClass.smethod_6<SpecialEventType>(TritonHs.MainAssemblyPath, "", "SpecialEventManager", "PRE_CURRENT_SET_ROTATION_EVENT");

		public static SpecialEventType UPCOMING_SET_ROTATION_EVENT => MonoClass.smethod_6<SpecialEventType>(TritonHs.MainAssemblyPath, "", "SpecialEventManager", "UPCOMING_SET_ROTATION_EVENT");

		public bool m_currentSetRotationActive => method_2<bool>("m_currentSetRotationActive");

		public SpecialEventManager(IntPtr address, string className)
			: base(address, className)
		{
		}

		public SpecialEventManager(IntPtr address)
			: this(address, "SpecialEventManager")
		{
		}

		public static SpecialEventManager Get()
		{
			return MonoClass.smethod_15<SpecialEventManager>(TritonHs.MainAssemblyPath, "", "SpecialEventManager", "Get", Array.Empty<object>());
		}

		public static SpecialEventType GetEventType(string eventName, SpecialEventType defaultIfNotExists)
		{
			return MonoClass.smethod_14<SpecialEventType>(TritonHs.MainAssemblyPath, "", "SpecialEventManager", "GetEventType", new object[2] { eventName, defaultIfNotExists });
		}

		public bool HasEventStarted(string eventName)
		{
			return method_10<bool>("HasEventStarted", new Class276.Enum20[1] { Class276.Enum20.String }, new object[1] { eventName });
		}

		public bool HasEventStarted(SpecialEventType eventType)
		{
			return method_10<bool>("HasEventStarted", new Class276.Enum20[1] { Class276.Enum20.ValueType }, new object[1] { eventType });
		}

		public bool IsStartTimeInTheFuture(string eventName)
		{
			return method_11<bool>("IsStartTimeInTheFuture", new object[1] { eventName });
		}

		public bool HasEventEnded(string eventName)
		{
			return method_10<bool>("HasEventEnded", new Class276.Enum20[1] { Class276.Enum20.String }, new object[1] { eventName });
		}

		public bool HasEventEnded(SpecialEventType eventType)
		{
			return method_10<bool>("HasEventEnded", new Class276.Enum20[1] { Class276.Enum20.ValueType }, new object[1] { eventType });
		}

		public bool IsEventActive(SpecialEventType eventType, bool activeIfDoesNotExist)
		{
			return method_10<bool>("IsEventActive", new Class276.Enum20[2]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.Boolean
			}, new object[2] { eventType, activeIfDoesNotExist });
		}

		public bool IsEventActive(SpecialEventType eventType, bool activeIfDoesNotExist, DateTime localTimestamp)
		{
			return method_10<bool>("IsEventActive", new Class276.Enum20[3]
			{
				Class276.Enum20.ValueType,
				Class276.Enum20.Boolean,
				Class276.Enum20.ValueType
			}, new object[3] { eventType, activeIfDoesNotExist, localTimestamp });
		}

		public bool IsEventActive(string eventName, bool activeIfDoesNotExist)
		{
			return method_10<bool>("IsEventActive", new Class276.Enum20[2]
			{
				Class276.Enum20.String,
				Class276.Enum20.Boolean
			}, new object[2] { eventName, activeIfDoesNotExist });
		}

		public bool IsEventActive(string eventName, bool activeIfDoesNotExist, DateTime localTimestamp)
		{
			return method_10<bool>("IsEventActive", new Class276.Enum20[3]
			{
				Class276.Enum20.String,
				Class276.Enum20.Boolean,
				Class276.Enum20.ValueType
			}, new object[3] { eventName, activeIfDoesNotExist, localTimestamp });
		}

		public bool CheckForSetRotationRollover()
		{
			return method_11<bool>("CheckForSetRotationRollover", Array.Empty<object>());
		}

		public void Cheat_OverrideSetRotationDate(DateTime date)
		{
			method_8("Cheat_OverrideSetRotationDate", date);
		}

		public void OnReset()
		{
			method_8("OnReset");
		}

		public bool IsEventActive_Impl(SpecialEventType eventType, bool activeIfDoesNotExist, DateTime localTimestamp)
		{
			return method_11<bool>("IsEventActive_Impl", new object[3] { eventType, activeIfDoesNotExist, localTimestamp });
		}

		public bool IsEventForcedInactive(SpecialEventType eventType)
		{
			return method_11<bool>("IsEventForcedInactive", new object[1] { eventType });
		}

		public bool IsEventForcedActive(SpecialEventType eventType)
		{
			return method_11<bool>("IsEventForcedActive", new object[1] { eventType });
		}
	}
}
